﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Web.Http;

using API.Models;
using API.Models.Repository;

namespace API.Controllers.api.v1
{
    public class OutgoingInvoicesCommerceMLController : BasicController
    {
        public void Post(IEnumerable<V_OutgoingInvoices> value)
        {
            var repository = new OutgoingInvoices_Repository();
            repository.SetSession(this.currentSession);

            value.ToList().ForEach(r =>
            {
                r.GUID_RECORD = Guid.NewGuid();

                repository.Add(r);
                repository.Save();
                repository.Recode(r.GUID_RECORD);
                this.CheckConstraints(r.GUID_RECORD);
            });
        }

        private void CheckConstraints(Guid GUID_RECORD)
        {
            var repository = new IncomingInvoices_Repository();
            var userCompanyRepository = new SEC_USER_COMPANIES_Repository();

            var data = repository
                .Find(r => r.GUID_RECORD == GUID_RECORD && r.CUSTOMER_GUID != null)
                .ToList();

            data
                .Where(r => r.LINES.Any(n => !n.ITEM_GUID.HasValue))
                .ToList()
                .ForEach(r =>
                {
                    var users = userCompanyRepository.Find(n =>
                        n.COMPANY_GUID == r.CUSTOMER_GUID && n.IS_ALLOWED).Select(n => n.USER);

                    var message = @"<h3>Уважаемый пользователь</h3><br/><a href='" + Request.RequestUri.Host + "/document/incoming/#!/invoice/" + r.GUID_RECORD.ToString() + "'>Накладная №" + r.DOC_NUMBER + " от " + r.DOC_DATE.ToShortDateString() + "</a> не может быть загружена.<br/>Требуется ввести соответствие для товаров<br/>";

                    users.ToList().ForEach(n =>
                    {
                        if (!String.IsNullOrEmpty(n.EMAIL))
                            new Core.EdexMail().Send(n.EMAIL, "Указать соответствие для товара", message);
                    });

                });
/*
            data
                .Where(r => !r.LOCATION_GUID.HasValue)
                .ToList()
                .ForEach(r =>
                {
                    var users = userCompanyRepository.Find(n =>
                        n.ALLOW_TO_GUID == r.CUSTOMER_GUID && n.IS_ALLOWED).Select(n => n.USER);

                    var message = @"
Уважаемый пользователь!

Накладная №{0} от {1} не может быть загружена. Требуется ввести соответствие для склада.";

                    message = String.Format(message, r.DOC_NUMBER, r.DOC_DATE.ToShortDateString());

                    users.ToList().ForEach(n =>
                    {
                        if (!String.IsNullOrEmpty(n.EMAIL))
                            new Core.EdexMail().Send(n.EMAIL, "EDEX. Указать соответствие для товара", message);
                    });

                });
 */
        }
    }
}
